<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script>
   // 什么是 Promise？
   // Promise/A+ 规范
   //       Promise/A+ 规范是一个 JavaScript Promise 的实现标准，它定义了 Promise 的行为和特性，
   //       确保不同的 Promise 实现能够互操作。Promise/A+ 是 JavaScript 中 Promise 的基础，它详细描述了 Promise 的状态、
   //       方法以及如何处理异步操作的结果。

    //  ES6 中的 Promise
    //  ES6（ECMAScript 2015）将 Promise 标准化为 JavaScript 的内置功能。
    //  ES6 的 Promise 实现基于 Promise/A+ 规范，但在语法和特性上进行了扩展，使得 Promise 更加易用和强大。

    // Promise 的基本概念
    // Promise 是一种用于处理异步操作的对象。它代表一个在未来可能完成或失败的操作及其结果值。Promise 有以下几种状态：

    // Pending（待定）：初始状态，既不是 Fulfilled 也不是 Rejected。
    // Fulfilled（已兑现）：操作成功完成。
    // Rejected（已拒绝）：操作失败。
    // Promise 提供了一个 then 方法来处理操作的成功或失败结果。


    // Promise/A+ 规范
    // Promise/A+ 规范详细定义了 Promise 的行为和特性。以下是其核心要点：

    // 状态管理

    // Promise 可以处于三种状态之一：Pending、Fulfilled 或 Rejected。
    // 一旦状态变为 Fulfilled 或 Rejected，就不能再更改。
    // then 方法

    // Promise 必须实现一个 then 方法，then 方法接受两个可选参数：onFulfilled 和 onRejected。
    // onFulfilled 在 Promise 变为 Fulfilled 状态后必须被调用，且只能调用一次。
    // onRejected 在 Promise 变为 Rejected 状态后必须被调用，且只能调用一次。
    // then 方法必须返回一个新的 Promise 对象，以支持链式调用。
    // Promise 解决过程

    // Promise 的解决过程是一个抽象的操作，表示 Promise 如何从 Pending 状态变为 Fulfilled 或 Rejected 状态。
    // 如果 then 方法的 onFulfilled 或 onRejected 返回了一个值 x，则运行 [[Resolve]](promise2, x)，
    // 这里的 promise2 是 then 返回的新 Promise 对象。

    // ES6 中的 Promise
    // ES6 中的 Promise 是对 Promise/A+ 规范的实现，并在其基础上进行了扩展。以下是一些关键特性：
    // 1.创建 Promise
    let promise = new Promise((resolve, reject) => {
        // 异步操作
        if (成功) {
            resolve(value);
        } else {
            reject(error);
        }
    });
    // 2.then方法
    promise.then(onFulfilled, onRejected);

    // 3.链式调用
    // then 方法返回一个新的 Promise 对象，可以通过链式调用多个 then
    promise
    .then(value => {
        // 处理 Fulfilled
        return newValue;
    })
    .then(newValue => {
        // 处理上一个 then 返回的 newValue
    })
    .catch(error => {
        // 处理 Rejected
    });
    // 4.捕获错误
    // ES6 的 Promise 提供了 catch 方法来捕获 Promise 链中的错误。
    promise
    .then(value => {
        // 处理 Fulfilled
    })
    .catch(error => {
        // 处理 Rejected
    });
    // 5.静态方法
    // ES6 提供了 Promise.resolve、Promise.reject、Promise.all, Promise.race ，方便处理多个 Promise。
</script>
<body>
</body>
</html>